#ifndef __OLORIN_SHADER__
#define __OLORIN_SHADER__

#include <DLL.hpp>
#include <GL/glew.h>

namespace Olorin
{
	namespace Graphics
	{
		enum ShaderType
		{
			VertexShader = GL_VERTEX_SHADER,
			GeometryShader = GL_GEOMETRY_SHADER,
			ControlShader = GL_TESS_CONTROL_SHADER,
			EvaluationShader = GL_TESS_EVALUATION_SHADER,
			FragmentShader = GL_FRAGMENT_SHADER,
		};
		
		class DLLAPI Shader
		{
		protected:
			ShaderType shaderType;
			GLuint shaderID;
			bool original;
		public:
			Shader();
			Shader(const ShaderType& shaderType, const char* filename);
			Shader(const Shader& source);
			virtual ~Shader();
				
			const ShaderType& getShaderType() const;
			const GLuint& getShaderID() const;
				
			const bool load(const char* filename);
			const bool compile();
		};
	}
}

#endif